#pragma once

#define ToEEStr(t) (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(t)
#define Prop(type, name, var) property type name { type get() { return (type)var; } void set(type value) { var = value; }}
#define PropTarget(type, name, var, tar) property type name { type get() { return (type)var; } void set(type value) { var = (tar)value; }}
#define PropGet(type, name, var) property type name { type get() { return var; } }
#define PropString(name, var) property System::String^ name { System::String^ get() { return gcnew System::String(var); } void set(System::String^ value) { var = ToEEStr(value); } }

#define PropVec(name, var) property EsenthelNet::Vec^ name { EsenthelNet::Vec^ get() { return gcnew EsenthelNet::Vec(var); } void set(EsenthelNet::Vec^ value) { var = *value->vec; }}
#define PropVecP(name, var) property EsenthelNet::Vec^ name { EsenthelNet::Vec^ get() { return gcnew EsenthelNet::Vec(&var); } void set(EsenthelNet::Vec^ value) { var = *value->vec; }}

#define PropMet(type, name, var) property type name { type get() { return (type)var(); } void set(type value) { var(value); }}
#define PropMetVecP(name, var) property EsenthelNet::Vec^ name { EsenthelNet::Vec^ get() { return gcnew EsenthelNet::Vec(&var()); } void set(EsenthelNet::Vec^ value) { var(*value->vec); }}
#define PropMetTarget(type, name, var, target) property type name { type get() { return (type)var(); } void set(type value) { var((target)value); }}
#define PropMetString(name, var) property System::String^ name { System::String^ get() { return gcnew System::String(var()); } void set(System::String^ value) { var(ToEEStr(value)); }}
#define PropMetStringGet(name, var) property System::String^ name { System::String^ get() { return gcnew System::String(var()); } }
#define PropMetGet(type, name, var) property type name { type get() { return (type)var(); } }

public delegate void EmptyDelegate();
public delegate bool BooleanDelegate();

#include <C:\Users\Kevin\Desktop\Libs\EsenthelEngineSDK\Installation\EsenthelEngine\EsenthelEngine.h>

#define ToList(listType, container) \
	System::Collections::Generic::List<listType^>^ list = gcnew System::Collections::Generic::List<listType^>();	\
	int elms = EE::ELMS(container);																					\
	for(int i = 0; i < elms; i++) {																					\
		list->Add(gcnew listType(&container[i]));																	\
	}

//using namespace System;

#include "Vec.h"
#include "Color.h"
#include "Matrix.h"
#include "MathHelper.h"

#include "Application.h"
#include "PakSet.h"
#include "Keyboard.h"
#include "Image.h"
#include "Camera.h"
#include "Material.h"

#include "DisplayDraw.h"
#include "Display.h"


#include "Box.h"
#include "Ball.h"
#include "Lights.h"

#include "MeshPart.h"
#include "MeshLod.h"
#include "MeshBase.h"
#include "Mesh.h"

#include "RendererClass.h"
#include "Timer.h"
#include "SkyClass.h"
#include "Physics.h"
#include "Sun.h"

#include "ObjParams.h"
#include "Obj.h"
#include "Chr.h"
#include "World.h"

